package madixin.t697;

import java.util.*;

class Solution {
    public int findShortestSubArray(int[] nums) {
        //使用map统计每个数字，及该数字对应的索引
        Map<Integer, List<Integer>> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if (!map.containsKey(nums[i])) {
                map.put(nums[i], new ArrayList());
            }
            map.get(nums[i]).add(i);
        }

        int res = Integer.MAX_VALUE;//表示长度
        int freq = 0;//表示度
        Set<Map.Entry<Integer, List<Integer>>> it = map.entrySet();
        for (Map.Entry<Integer, List<Integer>> i : it) {
            if (i.getValue().size() > freq) {
                res = i.getValue().get(i.getValue().size() - 1) - i.getValue().get(0) + 1;
                freq = i.getValue().size();
            } else if (i.getValue().size() == freq) {
                res = Math.min(res, i.getValue().get(i.getValue().size() - 1) - i.getValue().get(0) + 1);
            }
        }
        return res;
    }

    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println(s.findShortestSubArray(new int[]{1, 2, 2, 3, 1}));
    }
}